package com.sybil.ot.controlador;

import com.sybil.ot.dominio.DefectoParo;
import com.sybil.ot.dominio.Equipo;
import com.sybil.ot.dominio.Mantenimiento;
import com.sybil.ot.dominio.OrdenTrabajo;
import com.sybil.ot.dominio.Planta;
import com.sybil.ot.dominio.ResponsableZona;
import com.sybil.ot.dominio.TrabajoRealizado;
import com.sybil.ot.servicio.CatalogoService;
import com.sybil.ot.servicio.EquipoServicio;
import com.sybil.ot.servicio.OrdenTrabajoService;
import com.sybil.ot.servicio.PlantaService;
import com.sybil.ot.servicio.ProveedorService;
import com.sybil.ot.servicio.TipoEquipoService;
import com.sybil.ot.servicio.UsuarioServicio;
import java.beans.PropertyEditorSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping("/ordenes")
public class OrdenTrabajoControlador {

   @Autowired
   private CatalogoService catalogoService;
   @Autowired
   private OrdenTrabajoService ordenTrabajoService;
   @Autowired
   private TipoEquipoService tipoEquipoService;
   @Autowired
   private PlantaService plantaService;
   @Autowired
   private EquipoServicio equipoServicio;
   @Autowired
   private ProveedorService proveedorService;
   @Autowired
   private UsuarioServicio usuarioServicio;

   @InitBinder
   public void binder(WebDataBinder binder) {
      binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
         @Override
         public void setAsText(String value) {
            try {
               setValue(new java.text.SimpleDateFormat("dd/MM/yyyy").parse(value));
            } catch (java.text.ParseException e) {
               setValue(null);
            }
         }

         @Override
         public String getAsText() {
            try {
               return new java.text.SimpleDateFormat("dd/MM/yyyy").format((Date) getValue());
            } catch (Exception e) {
               return "";
            }
         }
      });
   }

   @RequestMapping(method = RequestMethod.GET)
   public String ordenTrabajoLista(Model model) {
      model.addAttribute("ordenes", ordenTrabajoService.obtenerOrdenesTrabajo());
      return "ordentrabajo/listado";
   }

   @RequestMapping(params = "form", method = RequestMethod.GET)
   public String formularioOrdenTrabajoNueva(Model model) {
      OrdenTrabajo ordenTrabajo = new OrdenTrabajo();
      ordenTrabajo.setGeneroParo("N");
      ordenTrabajo.setFechaInicio(new Date());
      String usuarioActual = SecurityContextHolder.getContext().getAuthentication().getName();
      ordenTrabajo.setSolicitante(usuarioServicio.obtenerUsuario(usuarioActual));
      ordenTrabajo.setMantenimientos(new ArrayList<Mantenimiento>());
      ordenTrabajo.getMantenimientos().add(new Mantenimiento());
      model.addAttribute(ordenTrabajo);
      model.addAttribute("clases", catalogoService.obtenerClasesActivas());
      model.addAttribute("tiposEquipo", tipoEquipoService.obtenerTiposEquipo());
      model.addAttribute("tiposTrabajo", catalogoService.obtenerTiposTrabajoActivos());
      model.addAttribute("proveedores", proveedorService.obtenerProveedores());
      model.addAttribute("responsables", catalogoService.obtenerResponsablesZona());
      model.addAttribute("causas", catalogoService.obtenerCausasParo());
//      model.addAttribute("defectos", catalogoService.obtenerDefectos());
//      model.addAttribute("acciones", catalogoService.obtenerAcciones());
      model.addAttribute("plantas", plantaService.obtenerPlantas());
      return "ordentrabajo/nueva";
   }

   @RequestMapping(params = "form", method = RequestMethod.POST)
   public String ordenTrabajoNueva(@Valid @ModelAttribute OrdenTrabajo ordenTrabajo,
           BindingResult result, Model model,
           @RequestParam("cmb_unidad_medida") long unidadMedida,
           @RequestParam(required = false, value = "agrega") String agrega,
           @RequestParam(required = false, value = "copia") String copia,
           @RequestParam(required = false, value = "borra") String borra) {
      if (agrega != null) {
         model.addAttribute("clases", catalogoService.obtenerClasesActivas());
         model.addAttribute("tiposEquipo", tipoEquipoService.obtenerTiposEquipo());
         model.addAttribute("tiposTrabajo", catalogoService.obtenerTiposTrabajoActivos());
         model.addAttribute("proveedores", proveedorService.obtenerProveedores());
         model.addAttribute("responsables", catalogoService.obtenerResponsablesZona());
         model.addAttribute("causas", catalogoService.obtenerCausasParo());
         model.addAttribute("plantas", plantaService.obtenerPlantas());
         List<Mantenimiento> mantenimientos = ordenTrabajo.getMantenimientos();
         for (Mantenimiento mantenimiento : mantenimientos) {
            if (mantenimiento.getEquipo() != null && !"".equals(mantenimiento.getEquipo().getClave())) {
               mantenimiento.setEquipo(equipoServicio.obtenerEquipo(mantenimiento.getEquipo().getClave()));
            } else {
               if (mantenimiento.getPlanta() != null && !"".equals(mantenimiento.getPlanta().getClave())) {
                  mantenimiento.setPlanta(plantaService.obtenerPlanta(mantenimiento.getPlanta().getClave()));
               }
            }
         }
         mantenimientos.add(new Mantenimiento());
         return "ordentrabajo/nueva";
      } else if (copia != null) {
         model.addAttribute("clases", catalogoService.obtenerClasesActivas());
         model.addAttribute("tiposEquipo", tipoEquipoService.obtenerTiposEquipo());
         model.addAttribute("tiposTrabajo", catalogoService.obtenerTiposTrabajoActivos());
         model.addAttribute("proveedores", proveedorService.obtenerProveedores());
         model.addAttribute("responsables", catalogoService.obtenerResponsablesZona());
         model.addAttribute("causas", catalogoService.obtenerCausasParo());
         model.addAttribute("plantas", plantaService.obtenerPlantas());
         List<Mantenimiento> mantenimientos = ordenTrabajo.getMantenimientos();
         for (Mantenimiento mantenimiento : mantenimientos) {
            if (mantenimiento.getEquipo() != null && !"".equals(mantenimiento.getEquipo().getClave())) {
               mantenimiento.setEquipo(equipoServicio.obtenerEquipo(mantenimiento.getEquipo().getClave()));
            } else {
               if (mantenimiento.getPlanta() != null && !"".equals(mantenimiento.getPlanta().getClave())) {
                  mantenimiento.setPlanta(plantaService.obtenerPlanta(mantenimiento.getPlanta().getClave()));
               }
            }
         }
         Mantenimiento get = ordenTrabajo.getMantenimientos().get(Integer.parseInt(copia));
         mantenimientos.add(get);
         return "ordentrabajo/nueva";
      } else if (borra != null) {
         model.addAttribute("clases", catalogoService.obtenerClasesActivas());
         model.addAttribute("tiposEquipo", tipoEquipoService.obtenerTiposEquipo());
         model.addAttribute("tiposTrabajo", catalogoService.obtenerTiposTrabajoActivos());
         model.addAttribute("proveedores", proveedorService.obtenerProveedores());
         model.addAttribute("responsables", catalogoService.obtenerResponsablesZona());
         model.addAttribute("causas", catalogoService.obtenerCausasParo());
         model.addAttribute("plantas", plantaService.obtenerPlantas());

         List<Mantenimiento> mantenimientos = ordenTrabajo.getMantenimientos();
         mantenimientos.remove(Integer.parseInt(borra));
         for (Mantenimiento mantenimiento : mantenimientos) {
            if (mantenimiento.getEquipo() != null && !"".equals(mantenimiento.getEquipo().getClave())) {
               mantenimiento.setEquipo(equipoServicio.obtenerEquipo(mantenimiento.getEquipo().getClave()));
            } else {
               if (mantenimiento.getPlanta() != null && !"".equals(mantenimiento.getPlanta().getClave())) {
                  mantenimiento.setPlanta(plantaService.obtenerPlanta(mantenimiento.getPlanta().getClave()));
               }
            }
         }
         return "ordentrabajo/nueva";
      } else {
         if (result.hasErrors()) {
            model.addAttribute("clases", catalogoService.obtenerClasesActivas());
            model.addAttribute("tiposEquipo", tipoEquipoService.obtenerTiposEquipo());
            model.addAttribute("tiposTrabajo", catalogoService.obtenerTiposTrabajoActivos());
            model.addAttribute("proveedores", proveedorService.obtenerProveedores());
            model.addAttribute("responsables", catalogoService.obtenerResponsablesZona());
            model.addAttribute("causas", catalogoService.obtenerCausasParo());
            model.addAttribute("plantas", plantaService.obtenerPlantas());
            List<Mantenimiento> mantenimientos = ordenTrabajo.getMantenimientos();
            for (Mantenimiento mantenimiento : mantenimientos) {
               if (mantenimiento.getEquipo() != null && !"".equals(mantenimiento.getEquipo().getClave())) {
                  mantenimiento.setEquipo(equipoServicio.obtenerEquipo(mantenimiento.getEquipo().getClave()));
               } else {
                  if (mantenimiento.getPlanta() != null && !"".equals(mantenimiento.getPlanta().getClave())) {
                     mantenimiento.setPlanta(plantaService.obtenerPlanta(mantenimiento.getPlanta().getClave()));
                  }
               }
            }
            return "ordentrabajo/nueva";
         } else {
            String usuarioActual = SecurityContextHolder.getContext().getAuthentication().getName();
            ordenTrabajo.setUsuarioCreo(usuarioActual);
            long tiempo = ordenTrabajo.getTiempoParo() * unidadMedida;
            ordenTrabajo.setTiempoParo(tiempo);
            ordenTrabajoService.guardar(ordenTrabajo);
            return "redirect:/ordenes";
         }
      }
   }

   @RequestMapping(value = "/{numero}", params = {"serie", "ac"}, method = RequestMethod.GET)
   public String formularioOrdenTrabajoEditar(
           @PathVariable("numero") int numero,
           @RequestParam(value = "serie") String serie,
           @RequestParam(value = "ac") String ac,
           Model model) {
      if ("e".equalsIgnoreCase(ac)) {
         OrdenTrabajo ordenTrabajo = ordenTrabajoService.obtenerOrdenTrabajo(serie, numero);
         model.addAttribute("causas", catalogoService.obtenerCausasParo());
         model.addAttribute(ordenTrabajo);
         return "ordentrabajo/editar";
      } else {
         ordenTrabajoService.eliminarOrdenTrabajo(serie, numero);
         return "redirect:/ordenes";
      }
   }

   @RequestMapping(value = "/{numero}", params = {"serie", "ac"}, method = RequestMethod.POST)
   public String ordenTrabajoEditar(@Valid @ModelAttribute OrdenTrabajo ordenTrabajo,
           BindingResult result, Model model) {
      if (result.hasErrors()) {
         model.addAttribute("causas", catalogoService.obtenerCausas());
         return "ordentrabajo/editar";
      } else {
         String usuarioActual = SecurityContextHolder.getContext().getAuthentication().getName();
         ordenTrabajo.setUsuarioModif(usuarioActual);
         ordenTrabajoService.editar(ordenTrabajo);
         return "redirect:/ordenes";
      }
   }

   @RequestMapping(value = "/equipos", params = "tipo", method = RequestMethod.GET)
   public @ResponseBody
   String obtenerEquipoPorTipo(@RequestParam(value = "tipo") String tipo,
           @RequestParam(value = "indice") String indice, Model model) {
      model.addAttribute("indice", indice);
      String combo = "<select id='cmb_" + indice + "'>";
      combo += "<option values=''>Seleccionar</option>";
      if ("PLANTA".equals(tipo)) {
         List<Planta> plantas = plantaService.obtenerPlantas();
         for (Planta planta : plantas) {
            combo += "<option value='" + planta.getClave() + "'>"
                    + planta.getValorMuestra() + "</option>";
         }
      } else {
         List<Equipo> equipos = equipoServicio.obtenerPorTipo(tipo);
         for (Equipo equipo : equipos) {

            combo += "<option value='" + equipo.getClave() + "'>"
                    + equipo.getValorMuestra() + "</option>";
         }
      }
      combo += "</select>";
      combo += "<script type='text/javascript'>";
      combo += "$('#cmb_" + indice + "').change(function() {";
      combo += "  var seleccionado = $(this).val();";
      combo += "$('#pl" + indice + "').val('');";
      combo += "$('#eq" + indice + "').val('');";
      if ("PLANTA".equals(tipo)) {
         combo += "$('#pl" + indice + "').val(seleccionado);";
      } else {
         combo += "$('#eq" + indice + "').val(seleccionado);";
      }
      combo += "});";
      combo += "</script>";
      return combo;
   }

   @RequestMapping(value = "/reponsablez", params = {"cu", "cz"}, method = RequestMethod.GET)
   public @ResponseBody
   String obtenerResponsable(@RequestParam(value = "cu") String codigoUsuario,
           @RequestParam(value = "cz") String claveZona, Model model) {
      ResponsableZona responsable = catalogoService.obtenerResponsablesZona(codigoUsuario, claveZona);
      String seccion = responsable.getVehiculos().equals("S") ? "AUTOMOTRIZ" : "";
      seccion += responsable.getPlantas().equals("S") ? " PLANTAS" : "";
      seccion += responsable.getBombas().equals("S") ? " BOMBAS" : "";
      String detalleResponsable = "<script type='text/javascript'>"
              + "$('#zona_respon_mostrar').html('" + responsable.getZona().getDescripcion() + "');"
              + "$('#seccion_responsable').html('" + seccion + "');"
              + "</script>";
      return detalleResponsable;
   }

   @RequestMapping(value = "/comp", params = {"so", "no"}, method = RequestMethod.GET)
   public String formularioOrdenTrabajoComplementar(
           @RequestParam(value = "so") String serie,
           @RequestParam(value = "no") int numero, Model model) {
      OrdenTrabajo ordenTrabajo = ordenTrabajoService.obtenerOrdenTrabajo(serie, numero);
      if (ordenTrabajo.getFechaFin() == null) {
         ordenTrabajo.setFechaFin(new Date());
      }
      ordenTrabajo.getDefectos().add(new DefectoParo());
      TrabajoRealizado trabajoRealizadoM = new TrabajoRealizado();
      trabajoRealizadoM.setPorcentajeIva(16);
      trabajoRealizadoM.setTipo("M");
      ordenTrabajo.getTrabajosRealizados().add(trabajoRealizadoM);
      TrabajoRealizado trabajoRealizadoR = new TrabajoRealizado();
      trabajoRealizadoR.setTipo("R");
      ordenTrabajo.getTrabajosRealizados().add(trabajoRealizadoR);
      model.addAttribute("causasP", catalogoService.obtenerCausasParo());
      model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
      model.addAttribute("defectos", catalogoService.obtenerDefectos());
      model.addAttribute("acciones", catalogoService.obtenerAcciones());
      model.addAttribute(ordenTrabajo);
      return "ordentrabajo/complementar";
   }

   @RequestMapping(value = "/comp", params = {"so", "no"}, method = RequestMethod.POST)
   public String ordenTrabajoComplementar(@Valid @ModelAttribute OrdenTrabajo ordenTrabajo,
           BindingResult result, @RequestParam(required = false, value = "ot_anexo") MultipartFile anexoOT,
           @RequestParam(required = false, value = "agregaD") String agregaD,
           @RequestParam(required = false, value = "borraD") String borraD,
           @RequestParam(required = false, value = "agregaM") String agregaM,
           @RequestParam(required = false, value = "borraM") String borraM,
           @RequestParam(required = false, value = "agregaR") String agregaR,
           @RequestParam(required = false, value = "borraR") String borraR, Model model) {
      if (agregaD != null) {
         model.addAttribute("causasP", catalogoService.obtenerCausasParo());
         model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
         model.addAttribute("defectos", catalogoService.obtenerDefectos());
         model.addAttribute("acciones", catalogoService.obtenerAcciones());
         OrdenTrabajo ot = ordenTrabajoService.obtenerOrdenTrabajo(ordenTrabajo.getLlave().getSerie(), ordenTrabajo.getLlave().getNumero());
         ordenTrabajo.setEmpleado(ot.getEmpleado());
         ordenTrabajo.setZona(ot.getZona());
         ordenTrabajo.setPlanta(ot.getPlanta());
         ordenTrabajo.setSolicitante(ot.getSolicitante());
         ordenTrabajo.setHistoricos(ot.getHistoricos());
         ordenTrabajo.setMantenimientos(ot.getMantenimientos());
         
         List<DefectoParo> defectos = ot.getDefectos();
         List<DefectoParo> defectos1 = ordenTrabajo.getDefectos();
         //toma el subarreglo que se le ha agregado y se lo agrega al original
         defectos.addAll(defectos1.subList(defectos.size(), defectos1.size()));
         defectos.add(new DefectoParo());
         ordenTrabajo.setDefectos(defectos);
         return "ordentrabajo/complementar";
      } else if (borraD != null) {
         model.addAttribute("causasP", catalogoService.obtenerCausasParo());
         model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
         model.addAttribute("defectos", catalogoService.obtenerDefectos());
         model.addAttribute("acciones", catalogoService.obtenerAcciones());
         OrdenTrabajo ot = ordenTrabajoService.obtenerOrdenTrabajo(ordenTrabajo.getLlave().getSerie(), ordenTrabajo.getLlave().getNumero());
         ordenTrabajo.setEmpleado(ot.getEmpleado());
         ordenTrabajo.setZona(ot.getZona());
         ordenTrabajo.setPlanta(ot.getPlanta());
         ordenTrabajo.setSolicitante(ot.getSolicitante());
         ordenTrabajo.setHistoricos(ot.getHistoricos());
         ordenTrabajo.setMantenimientos(ot.getMantenimientos());

         ordenTrabajo.getDefectos().remove(Integer.parseInt(borraD));
         return "ordentrabajo/complementar";
      } else if (agregaM != null) {//agregar mano de obra
         model.addAttribute("causasP", catalogoService.obtenerCausasParo());
         model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
         model.addAttribute("defectos", catalogoService.obtenerDefectos());
         model.addAttribute("acciones", catalogoService.obtenerAcciones());
         OrdenTrabajo ot = ordenTrabajoService.obtenerOrdenTrabajo(ordenTrabajo.getLlave().getSerie(), ordenTrabajo.getLlave().getNumero());
         ordenTrabajo.setEmpleado(ot.getEmpleado());
         ordenTrabajo.setZona(ot.getZona());
         ordenTrabajo.setPlanta(ot.getPlanta());
         ordenTrabajo.setSolicitante(ot.getSolicitante());
         ordenTrabajo.setHistoricos(ot.getHistoricos());
         ordenTrabajo.setMantenimientos(ot.getMantenimientos());
         
         List<TrabajoRealizado> trabajosRealizados = ot.getTrabajosRealizados();
         List<TrabajoRealizado> trabajosRealizados1 = ordenTrabajo.getTrabajosRealizados();
         trabajosRealizados.addAll(trabajosRealizados1.subList(trabajosRealizados.size(), trabajosRealizados1.size()));
         TrabajoRealizado trabajoRealizadoM = new TrabajoRealizado();
         trabajoRealizadoM.setTipo("M");
         trabajosRealizados.add(trabajoRealizadoM);
         ordenTrabajo.setTrabajosRealizados(trabajosRealizados);
         return "ordentrabajo/complementar";
      } else if (borraM != null) {
         model.addAttribute("causasP", catalogoService.obtenerCausasParo());
         model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
         model.addAttribute("defectos", catalogoService.obtenerDefectos());
         model.addAttribute("acciones", catalogoService.obtenerAcciones());
         OrdenTrabajo ot = ordenTrabajoService.obtenerOrdenTrabajo(ordenTrabajo.getLlave().getSerie(), ordenTrabajo.getLlave().getNumero());
         ordenTrabajo.setEmpleado(ot.getEmpleado());
         ordenTrabajo.setZona(ot.getZona());
         ordenTrabajo.setPlanta(ot.getPlanta());
         ordenTrabajo.setSolicitante(ot.getSolicitante());
         ordenTrabajo.setHistoricos(ot.getHistoricos());
         ordenTrabajo.setMantenimientos(ot.getMantenimientos());
         
         ordenTrabajo.getTrabajosRealizados().remove(Integer.parseInt(borraM));
         return "ordentrabajo/complementar";
      } else if (agregaR != null) {
         model.addAttribute("causasP", catalogoService.obtenerCausasParo());
         model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
         model.addAttribute("defectos", catalogoService.obtenerDefectos());
         model.addAttribute("acciones", catalogoService.obtenerAcciones());
         OrdenTrabajo ot = ordenTrabajoService.obtenerOrdenTrabajo(ordenTrabajo.getLlave().getSerie(), ordenTrabajo.getLlave().getNumero());
         ordenTrabajo.setEmpleado(ot.getEmpleado());
         ordenTrabajo.setZona(ot.getZona());
         ordenTrabajo.setPlanta(ot.getPlanta());
         ordenTrabajo.setSolicitante(ot.getSolicitante());
         ordenTrabajo.setHistoricos(ot.getHistoricos());
         ordenTrabajo.setMantenimientos(ot.getMantenimientos());
         
         List<TrabajoRealizado> trabajosRealizados = ot.getTrabajosRealizados();
         List<TrabajoRealizado> trabajosRealizados1 = ordenTrabajo.getTrabajosRealizados();
         trabajosRealizados.addAll(trabajosRealizados1.subList(trabajosRealizados.size(), trabajosRealizados1.size()));
         TrabajoRealizado trabajoRealizadoM = new TrabajoRealizado();
         trabajoRealizadoM.setTipo("R");
         trabajosRealizados.add(trabajoRealizadoM);
         ordenTrabajo.setTrabajosRealizados(trabajosRealizados);
         return "ordentrabajo/complementar";
      } else if (borraR != null) {
         model.addAttribute("causasP", catalogoService.obtenerCausasParo());
         model.addAttribute("causasD", catalogoService.obtenerCausasDefecto());
         model.addAttribute("defectos", catalogoService.obtenerDefectos());
         model.addAttribute("acciones", catalogoService.obtenerAcciones());
         OrdenTrabajo ot = ordenTrabajoService.obtenerOrdenTrabajo(ordenTrabajo.getLlave().getSerie(), ordenTrabajo.getLlave().getNumero());
         ordenTrabajo.setEmpleado(ot.getEmpleado());
         ordenTrabajo.setZona(ot.getZona());
         ordenTrabajo.setPlanta(ot.getPlanta());
         ordenTrabajo.setSolicitante(ot.getSolicitante());
         ordenTrabajo.setHistoricos(ot.getHistoricos());
         ordenTrabajo.setMantenimientos(ot.getMantenimientos());
         
         ordenTrabajo.getTrabajosRealizados().remove(Integer.parseInt(borraR));
         return "ordentrabajo/complementar";
      } else {
         if (result.hasErrors()) {
            return "ordentrabajo/complementar";
         } else {
            String usuarioActual = SecurityContextHolder.getContext().getAuthentication().getName();
            ordenTrabajo.setUsuarioModif(usuarioActual);
            ordenTrabajoService.complementar(ordenTrabajo, anexoOT);
            return "redirect:/ordenes";
         }
      }
   }

   @RequestMapping(value = "/pdf", params = {"so", "no"}, method = RequestMethod.GET)
   public void pdfOrdenTrabajo(
           @RequestParam(value = "so") String serie,
           @RequestParam(value = "no") int numero,
           HttpServletResponse response) {
      try {
         String ruta = ordenTrabajoService.generarPDF(serie, numero);
         InputStream is = new FileInputStream(new File(ruta));
         IOUtils.copy(is, response.getOutputStream());
         is.close();
         response.setContentType("application/pdf");
         response.flushBuffer();
      } catch (IOException ex) {
//      throw new RuntimeException("IOError writing file to output stream");
      }
   }

   @RequestMapping(value = "/anexo", params = "ruta", method = RequestMethod.GET)
   public void anexoOrdenTrabajo(
           @RequestParam(value = "ruta") String ruta,
           HttpServletResponse response) {
      try {
         InputStream is = new FileInputStream(new File(ruta));
         IOUtils.copy(is, response.getOutputStream());
         is.close();
//         response.setContentType("application/pdf");
         response.flushBuffer();
      } catch (IOException ex) {
//      throw new RuntimeException("IOError writing file to output stream");
      }
   }
}
